package com.sogoodsoft.entity.crm;

import java.util.Date;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.OneToMany;
import javax.persistence.OrderBy;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;

import com.sogoodsoft.entity.IdEntity;

/**
 * ORDER_FORM对象模型
 */
@Entity
@Table(name = "ORDER_FORM")
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class OrderForm extends IdEntity implements java.io.Serializable {
    private static final long serialVersionUID = 1L;

    /** 订单编号 */
    private String code;

    /** 发票号码，如果有的话 */
    private String recordno;

    /** 客户名称 */
    private String customer;

    /** 客户ID */
    private Long customerid;

    /** 下单时间 */
    private Date orderdate;

    /** 订单总金额 */
    private double totalcash;

    /** 订单总金额 */
    private String cashcn;

    /** 订单状态ID 1已确认 2未确认 */
    private Long statusid;

    /** 下单人姓名，或系统用户姓名 */
    private String maker;

    /** 下单人ID，如果有的话 */
    private Long makerid;

    /** 订单确认人姓名 */
    private String confirm;

    /** 订单确认人ID，或系统用户ID，如果有的话 */
    private Long confirmid;

    /** 订单确认时间 */
    private Date confirmdate;

    /** 订单备注 */
    private String note;

    private List < OrderDetail > detail;

    public enum STATUS {
        CONFIRMED(new Long(1)), UNCONFIRMED(new Long(2));
        private Long value;

        private STATUS(Long v) {
            this.value = v;
        }

        public Long getValue() {
            return value;
        }
    }

    /**
     * 获取订单编号
     * 
     * @return 订单编号
     */
    @Column(name = "CODE")
    public String getCode() {
        return this.code;
    }

    /**
     * 设置订单编号
     * 
     * @param code
     *            订单编号
     */
    public void setCode(String code) {
        this.code = code;
    }

    /**
     * 获取发票号码，如果有的话
     * 
     * @return 发票号码，如果有的话
     */
    @Column(name = "RECORDNO")
    public String getRecordno() {
        return this.recordno;
    }

    /**
     * 设置发票号码，如果有的话
     * 
     * @param recordno
     *            发票号码，如果有的话
     */
    public void setRecordno(String recordno) {
        this.recordno = recordno;
    }

    /**
     * 获取客户名称
     * 
     * @return 客户名称
     */
    @Column(name = "CUSTOMER")
    public String getCustomer() {
        return this.customer;
    }

    /**
     * 设置客户名称
     * 
     * @param customer
     *            客户名称
     */
    public void setCustomer(String customer) {
        this.customer = customer;
    }

    /**
     * 获取客户ID
     * 
     * @return 客户ID
     */
    @Column(name = "CUSTOMERID")
    public Long getCustomerid() {
        return this.customerid;
    }

    /**
     * 设置客户ID
     * 
     * @param customerid
     *            客户ID
     */
    public void setCustomerid(Long customerid) {
        this.customerid = customerid;
    }

    /**
     * 获取下单时间
     * 
     * @return 下单时间
     */
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "ORDERDATE")
    public Date getOrderdate() {
        if (orderdate == null)
            orderdate = new Date();
        return this.orderdate;
    }

    /**
     * 设置下单时间
     * 
     * @param orderdate
     *            下单时间
     */
    public void setOrderdate(Date orderdate) {
        this.orderdate = orderdate;
    }

    /**
     * 获取订单总金额
     * 
     * @return 订单总金额
     */
    @Column(name = "TOTALCASH")
    public double getTotalcash() {
        return this.totalcash;
    }

    /**
     * 设置订单总金额
     * 
     * @param totalcash
     *            订单总金额
     */
    public void setTotalcash(double totalcash) {
        this.totalcash = totalcash;
    }

    /**
     * 获取订单状态ID
     * 
     * @return 订单状态ID
     */
    @Column(name = "STATUSID")
    public Long getStatusid() {
        if (statusid == null)
            statusid = STATUS.UNCONFIRMED.value;
        return this.statusid;
    }

    /**
     * 设置订单状态ID
     * 
     * @param statusid
     *            订单状态ID
     */
    public void setStatusid(Long statusid) {
        this.statusid = statusid;
    }

    /**
     * 获取下单人姓名，或系统用户姓名
     * 
     * @return 下单人姓名，或系统用户姓名
     */
    @Column(name = "MAKER")
    public String getMaker() {
        return this.maker;
    }

    /**
     * 设置下单人姓名，或系统用户姓名
     * 
     * @param maker
     *            下单人姓名，或系统用户姓名
     */
    public void setMaker(String maker) {
        this.maker = maker;
    }

    /**
     * 获取下单人ID，如果有的话
     * 
     * @return 下单人ID，如果有的话
     */
    @Column(name = "MAKERID")
    public Long getMakerid() {
        return this.makerid;
    }

    /**
     * 设置下单人ID，如果有的话
     * 
     * @param makerid
     *            下单人ID，如果有的话
     */
    public void setMakerid(Long makerid) {
        this.makerid = makerid;
    }

    /**
     * 获取订单确认人姓名
     * 
     * @return 订单确认人姓名
     */
    @Column(name = "CONFIRM")
    public String getConfirm() {
        return this.confirm;
    }

    /**
     * 设置订单确认人姓名
     * 
     * @param confirm
     *            订单确认人姓名
     */
    public void setConfirm(String confirm) {
        this.confirm = confirm;
    }

    /**
     * 获取订单确认人ID，或系统用户ID，如果有的话
     * 
     * @return 订单确认人ID，或系统用户ID，如果有的话
     */
    @Column(name = "CONFIRMID")
    public Long getConfirmid() {
        return this.confirmid;
    }

    /**
     * 设置订单确认人ID，或系统用户ID，如果有的话
     * 
     * @param confirmid
     *            订单确认人ID，或系统用户ID，如果有的话
     */
    public void setConfirmid(Long confirmid) {
        this.confirmid = confirmid;
    }

    /**
     * 获取订单确认时间
     * 
     * @return 订单确认时间
     */
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "CONFIRMDATE")
    public Date getConfirmdate() {
        return this.confirmdate;
    }

    /**
     * 设置订单确认时间
     * 
     * @param confirmdate
     *            订单确认时间
     */
    public void setConfirmdate(Date confirmdate) {
        this.confirmdate = confirmdate;
    }

    /**
     * 获取订单备注
     * 
     * @return 订单备注
     */
    @Column(name = "NOTE")
    public String getNote() {
        return this.note;
    }

    /**
     * 设置订单备注
     * 
     * @param note
     *            订单备注
     */
    public void setNote(String note) {
        this.note = note;
    }

    @Column(name = "CASHCN")
    public String getCashcn() {
        return cashcn;
    }

    public void setCashcn(String cashcn) {
        this.cashcn = cashcn;
    }

    @OneToMany(mappedBy = "order", cascade = CascadeType.ALL)
    @OrderBy("id asc")
    public List < OrderDetail > getDetail() {
        return detail;
    }

    public void setDetail(List < OrderDetail > detail) {
        this.detail = detail;
    }

}